import com.DemoDataListener;
import com.ModelListener;
import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.support.hsf.HSFJSONUtils;
import com.bunde.model.DemoData;
import com.bunde.model.Model;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author dream
 * @title: Main
 * @projectName learn_repo
 * @description: TODO
 */
public class Main {

    /**
     * 最简单的读
     * <p>1. 创建excel对应的实体对象 参照{@link DemoData}
     * <p>2. 由于默认一行行的读取excel，所以需要创建excel一行一行的回调监听器，参照{@link DemoDataListener}
     * <p>3. 直接读即可
     */
    @Test
    public void simpleRead() {
        // 根据实际路径更改
        String fileName = "D:\\blog\\develop\\learn_repo\\excel_demo\\excel_read_test.xlsx";
        // 这里 需要指定读用哪个class去读，然后读取第一个sheet 文件流会自动关闭
        EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();
    }


    @Test
    public void simpleWrite() {
        String fileName = "easy_excel_write_test.xlsx";
        // 这里 需要指定写用哪个class去读，然后写到第一个sheet，名字为模板 然后文件流会自动关闭
        // 如果这里想使用03 则 传入excelType参数即可
        EasyExcel.write(fileName, DemoData.class).sheet("模板").doWrite(data());
    }

    public List<DemoData> data(){
        List<DemoData> res = new ArrayList<>();
        for(int i = 0; i < 20; i++){
            res.add(new DemoData("name" + i, new Date(), i * 10.0));
        }
        return res;
    }

    public List<Model> getData(int row){
        List<Model> models = new ArrayList<>();
        for(int i = 0; i < row; i++){
            models.add(new Model(i));
        }
        return models;
    }

    @Test
    public void writeTest(){
        String filename = "data.xlsx";
        List<Model> data = getData(200000);
        System.out.println(data.size() + ", " + data.get(0));
        long s = System.currentTimeMillis();
        EasyExcel.write(filename, Model.class).sheet("模板").doWrite(data);
        long e = System.currentTimeMillis();
        System.out.println("插入行数：200000， 列数：20" + "耗时： " + (e-s));
    }

    @Test
    public void readTest(){
        String filename = "data.xlsx";
        EasyExcel.read(filename, Model.class, new ModelListener()).sheet().doRead();
    }

    @Test
    // 不使用easy excel 进行数据的读取
    public void readTestWithPOISAX(){

    }
}
